From ed477e3f65882207ff2da901f6b5cf5c91f69814 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Niklas=20Laxstr=C3=B6m?= Date: Tue, 1 Dec 2015 17:25:16 +0100 Subject: [PATCH] mediawiki.api: fix badtoken handling with legacy token types Manual test plan: mw.loader.using( 'mediawiki.api.login' ).done( function () { var user = 'XXX', pass = 'YYY', api = new mw.Api(); api.login( user, pass ).done( function () { api.postWithToken( 'options', { action: 'options', optionname: 'userjs-tokentest', optionvalue: 1 } ).fail( function () { console.log( arguments ); } ); } ); } ); Change-Id: I175cf4e3a845cdfe621b6009920fddba6bc1ff12 --- resources/src/mediawiki/api.js | 2 ++ .../mediawiki.api/mediawiki.api.test.js | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/resources/src/mediawiki/api.js b/resources/src/mediawiki/api.js index c26dd6ae12..10e0c56387 100644 --- a/resources/src/mediawiki/api.js +++ b/resources/src/mediawiki/api.js @@ -368,6 +368,8 @@ */ badToken: function ( type ) { var promiseGroup = promises[ this.defaults.ajax.url ]; + + type = mapLegacyToken( type ); if ( promiseGroup ) { delete promiseGroup[ type + 'Token' ]; } diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js index a34a5af996..394f3bd56b 100644 --- a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js +++ b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js @@ -220,6 +220,30 @@ } ); + QUnit.test( 'badToken( legacy )', function ( assert ) { + QUnit.expect( 2 ); + var api = new mw.Api( { ajax: { url: '/badTokenLegacy/api.php' } } ), + test = this; + + this.server.respondWith( /type=csrf/, sequenceBodies( 200, { 'Content-Type': 'application/json' }, + [ + '{ "query": { "tokens": { "csrftoken": "badlegacy" } } }', + '{ "query": { "tokens": { "csrftoken": "goodlegacy" } } }' + ] + ) ); + + api.getToken( 'options' ) + .then( function () { + api.badToken( 'options' ); + return api.getToken( 'options' ); + } ) + .then( function ( token ) { + assert.equal( token, 'goodlegacy', 'The token' ); + assert.equal( test.server.requests.length, 2, 'Request made' ); + } ); + + } ); + QUnit.test( 'postWithToken( tokenType, params )', function ( assert ) { QUnit.expect( 1 ); var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } ); -- 2.20.1